package XZK010303.view;

import java.util.Map;
import java.util.Scanner;

import XZK010303.bean.Express;

/**
 * 快递E站-展示面板
 * mainMenu
 * - adminMenu
 * - userMenu
 *
 * @author bing.z 2021/5/31 20:39
 **/
public class Views {
    // 输入工具
    private static Scanner input = new Scanner(System.in);

    /**
     * 主操作面板
     *
     * @return
     */
    public int mainMenu() {
        System.out.println("根据序号选择具体的操作");
        System.out.println("1. 快递员操作");
        System.out.println("2. 用户操作");
        System.out.println("0. 退出系统");
        // 接受输入的序号
        String str = input.nextLine();
        int no = -1;
        try {
            no = Integer.parseInt(str);
        } catch (NumberFormatException e) {
            System.out.println("你输入的不是数字,请重新输入");
            return mainMenu();
        }
        // check
        if (no < 0 || no > 2) {
            System.out.println("你输入的功能序号有误，请重新输入");
            return mainMenu();
        }
        return no;
    }

    /**
     * 快递员操作面板
     *
     * @return
     */
    public int adminMenu() {
        System.out.println("请选择你所要操作的功能:");
        System.out.println("1. 录入快递");
        System.out.println("2. 删除快递");
        System.out.println("3. 修改快递");
        System.out.println("4. 查看所有快递");
        System.out.println("0. 返回主目录");
        // 接受输入的序号
        String str = input.nextLine();
        int no = -1;
        try {
            no = Integer.parseInt(str);
        } catch (NumberFormatException e) {
            System.out.println("你输入的不是数字,请重新输入");
            return adminMenu();
        }
        // check
        if (no < 0 || no > 4) {
            System.out.println("你输入的功能序号有误，请重新输入");
            return adminMenu();
        }
        return no;
    }

    /**
     * 用户操作面板
     *
     * @return
     */
    public int userMenu() {
        System.out.println("请选择你所要操作的功能:");
        System.out.println("1. 取快递");
        System.out.println("0. 返回主目录");
        // 接受输入的序号
        String str = input.nextLine();
        int no = -1;
        try {
            no = Integer.parseInt(str);
        } catch (NumberFormatException e) {
            System.out.println("你输入的不是数字,请重新输入");
            return userMenu();
        }
        // check
        if (no < 0 || no > 1) {
            System.out.println("你输入的功能序号有误，请重新输入");
            return userMenu();
        }
        return no;
    }

    /**
     * 录入快递面板
     *
     * @return 包含快递单号和快递公司的快递对象
     */
    public Express insert() {
        // 输入快递单号
        String number = getNumberOrCompany("请输入快递单号:");
        // 输入快递公司
        String company = getNumberOrCompany("请输入快递公司:");
        Express express = new Express(number, company);
        return express;
    }


    /**
     * 删除快递面板
     *
     * @return 快递单号
     */
    public String delete() {
        // 输入快递单号 getNumber();
        return getNumberOrCompany("请输入快递单号:");
    }

    /**
     * 获取快递单号或快递公司
     *
     * @param tip 打印的提示信息
     * @return 快递单号或快递公司
     */
    public String getNumberOrCompany(String tip) {
        System.out.println(tip);
        return input.nextLine();
    }

    /**
     * 更新快递对象的快递单号和快递公司
     *
     * @param updateExpress 需要更新的快递对象
     * @return 更新后的快递对象
     */
    public Express update(Express updateExpress) {
        String number = getNumberOrCompany("请输入新的快递单号:");
        String company = getNumberOrCompany("请输入新的快递公司:");
        updateExpress.setNumber(number);
        updateExpress.setCompany(company);
        return updateExpress;
    }

    public void showAll(Map<String, Express> expressMap) {
        if (expressMap == null || expressMap.size() == 0) {
            printNull();
            return;
        }
        // 遍历打印
        for (String number : expressMap.keySet()) {
            print(expressMap.get(number));
        }
    }

    /**
     * 打印快递对象
     *
     * @param express
     */
    private void print(Express express) {
        // 基本数据校验(不完善)
        if (express == null) {
            return;
        }
        System.out.println("快递单号\t\t快递公司\t\t取件码");
        System.out.println(express.getNumber() + "\t\t" + express.getCompany() + "\t\t" + express.getCode());
    }

    /**
     * 空快递柜提示
     */
    private void printNull() {
        System.out.println("==当前暂无快递==");
    }

    /**
     * 取快递面板
     *
     * @return 返回取件码
     */
    public int takeExpress() {
        System.out.println("输入取件码:");
        String str = input.nextLine();
        int code = -1;
        try {
            code = Integer.parseInt(str);
        } catch (NumberFormatException e) {
            System.out.println("你输入的不是数字,请重新输入");
            return takeExpress();
        }
        return code;
    }

    /**
     * 欢迎页
     */
    public void welcome() {
        System.out.println("欢迎使用 ZT 快递E柜");
    }

    /**
     * 退出提示
     */
    public void bye() {
        System.out.println("欢迎下次使用 ZT 快递E柜");
    }

    public void success() {
        System.out.println("操作成功!");
    }

    public void fail() {
        System.out.println("操作失败");
    }
}
